<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        //1 变量
        //var 会变量越界

        //let 变量

        for (let i=0;i<5;i++){
            console.log(i);
        }
        // console.log("我循环外"+i);
        // const 常量
        //2 不会换行 ``
        console.log(`weng
        yan
        min`);

        // 3默认值形参
        function fun(a,b=2) {
            console.log(a/b);
        }

        fun(10);
        fun(12,2);
        // 4es6字符串 新加的方法
        let  str='asdbdas';
        console.log(str.includes('s'));
        console.log(str.startsWith('as'));
        console.log(str.endsWith('as'));
        // 5es6 解构函数
        //我想获取其中的值，只能通过角标。ES6可以这样：
        //数组解构
        const  arr1=[1,2,3];
        let [a,b,c]=arr1;
        console.log(a,b,c);
        // let d;
        let [d,e]=arr1;
        console.log("这是"+d);
        //对象解构
        let  person1={
            name: 'weny',
            age:19,
            data: new Date()
        }

        const {name,age,data}=person1;
        console.log(data);
        //如过想要用其它变量接收，需要额外指定别名：
        const {name:n}=person1;
        console.log(n);
        //6 函数优化
        //箭头函数 定义函数的简写方式
        //一个参数
        let print0=function (obj) {
            console.log(obj);
        }
        //简写为
        let print1=obj=>console.log(obj);

        //多个参数
        let sum=function (a,b) {
            return a+b;
        }
        let sum1=(a,b)=>{
            return a+b;
        }
        //对象的函数属性简写
        let person2={
            name:"jack",
            //以前
            eat:function (food) {
                console.log(this.name+"再吃"+food);
            },
            eat2: food=>{
                console.log(person2.name+"再吃"+food);
            },
            eat3(food){
                console.log(this.name+"再吃"+food);
            }
        }
        person2.eat('饭');

        person2.eat2('米');

        person2.eat3('屎');
        //箭头函数结合解构表达式
        const person3={
            name:'jack',
            age:21,
            language:['java','js','css']
        }

        function hello(person3) {
            console.log("hello"+person3.name);
        }
        hello(person3);

        let le=({name,language})=>{//解构函数
            console.log('hello'+name+""+language);
        };
        //一下类似于 {name,language}=person3  解构数据
        le(person3);
        //7 map 和reduce
        //接收一个函数，将原数组中的所有元素用这个函数处理后放入新数组返回。
        //举例：有一个字符串数组，我们希望转为int数组
        let arr3=['1','20','-5','3'];
        console.log(arr3);
        arr3=arr3.map(arr3=>parseInt(arr3));
        console.log(arr3);
        //reduce
        //reduce()：接收一个函数（必须）和一个初始值（可选）。
         const arr4=[1,20,-5,3];
         arr4.reduce((a,b)=>a*b);
         console.log(arr4);
         //8 对象扩展
        /**
         * ES6给Object拓展了许多新的方法，如：

         - keys(obj)：获取对象的所有key形成的数组
         - values(obj)：获取对象的所有value形成的数组
         - entries(obj)：获取对象的所有key和value形成的二维数组。格式：[[k1,v1],[k2,v2],...]
         - assign(dest, ...src) ：将多个src对象的值 拷贝到 dest中（浅拷贝）。

         */
        let p2 ={name:'kack',
            age:21};
        let  obj={age:22};
        console.log(Object.assign(obj,p2));//拷贝p2 拷贝到obj中
        console.log(obj);

        Object.keys(obj);//获取对象的所有key形成的数组
        Object.values(obj);
        Object.entries(obj);//获取对象的所有key和value形成的二维数组。
        //9 数组扩展
        let arr5=['a','c','dasd','sdasd'];
        // arr5.find(a);
        //a=>a=='a' 函数
        console.log(arr5.find(a=>a=='a'));//回调函数

    </script>
</body>
</html>